BibliotecaAuxiliarScript.execute('framework.src.gui.MenuItem');
BibliotecaAuxiliarScript.execute('framework.src.gui.Label');
BibliotecaAuxiliarScript.execute('framework.src.gui.Image');

Field = MenuItem.new();

Field.tx_texto = nil;
Field.st_texto = '';
Field.fonte_texto = nil;
Field.nb_qtd_char = 10;
Field.lb_nome = nil;
Field.nb_distancia_label = 5;
Field.st_orientacao="TITULO_LEFT";
Field.TITULO_UP = "TITULO_UP";
Field.TITULO_LEFT = "TITULO_LEFT";
Field.TITULO_RIGHT = "TITULO_RIGHT";
Field.TITULO_DOWN = "TITULO_DOWN";
Field.is_texto_alterado = false;
Field.is_label_alterado = false;

function Field.__index(tabela,chave)
	return Field[chave];
end

function Field.new(o)
	local retorno = o or {};
	retorno = setmetatable(retorno,Field);
	
	retorno.tx_texto = Label.new();
	retorno.tx_texto:setTitulo(retorno.st_texto);
	retorno.tx_texto.cor_fundo = Cor.new({r=255,g=255,b=255});

	retorno.fonte_texto = Fonte.new({nome='Arial', tamanho=16});
	retorno.fonte_texto.cor = Cor.new({r=0,g=0,b=0});

	retorno.tx_texto:setFonte(retorno.fonte_texto);
	
	retorno.tx_texto.nb_largura = retorno.nb_qtd_char * BibliotecaAuxiliarDesenho.getLarguraTexto(retorno.fonte_texto,'A');

	retorno.tx_texto.is_largura_fixa = true;
	
	retorno.tx_texto:atualizar();

	return retorno;
end

function Field:draw()
	
	if(self.is_label_alterado or self.is_texto_alterado) then
		self:atualizar();
	end
	
	local fundo = BibliotecaAuxiliarDesenho.newImagem(self.nb_largura,self.nb_altura);
	BibliotecaAuxiliarDesenho.limparTela(fundo,self.cor_fundo);
	
	--desenha o texto
	if(self.tx_texto ~= nil)then
		BibliotecaAuxiliarDesenho.desenharImagem(self.tx_texto.nb_px,self.tx_texto.nb_py,self.tx_texto:draw(),fundo);
	end
	
	--desenha o label
	if(self.lb_nome ~= nil)then
		BibliotecaAuxiliarDesenho.desenharImagem(self.lb_nome.nb_px,self.lb_nome.nb_py,self.lb_nome:draw(),fundo);
	end
	
	return fundo;
end

function Field:handler(evt)
	if(BibliotecaAuxiliarEvento.isNumero(evt)) then
		self:escreverTexto(BibliotecaAuxiliarEvento.getTecla(evt))
	elseif(BibliotecaAuxiliarEvento.isBotaoEsquerda(evt))then
		self:apagarUltimoChar();
	elseif(BibliotecaAuxiliarEvento.isBotaoOk(evt))then
		self:apagarTexto();
	end
end

function Field:apagarUltimoChar()
	if(#self.st_texto > 0)then
		self:setTexto(string.sub(self.st_texto,0,#self.st_texto-1));
		
	end
end

function Field:apagarTexto()
	self:setTexto('');
end

function Field:escreverTexto(st_texto)
	if(#self.st_texto < self.nb_qtd_char)then
		self:setTexto(self.st_texto..st_texto);
	end
end

function Field:atualizar()
	
	if((self.tx_texto ~= nil) and (self.lb_nome ~= nil))then
		if(self.st_orientacao == Field.TITULO_UP) or (self.st_orientacao == Field.TITULO_DOWN)then
			self.nb_altura = self.tx_texto.nb_altura + self.lb_nome.nb_altura +self.nb_distancia_label + self.nb_margem_superior+self.nb_margem_inferior;
			self.nb_largura = math.max(self.tx_texto.nb_largura,self.lb_nome.nb_largura) + self.nb_margem_esquerda+self.nb_margem_direita;
			
			self.tx_texto.nb_px = (self.nb_largura - self.tx_texto.nb_largura)/2;
			self.lb_nome.nb_px = (self.nb_largura - self.lb_nome.nb_largura)/2;
			
			if(self.st_orientacao == Field.TITULO_UP) then
				
				self.lb_nome.nb_py = self.nb_margem_superior;
				self.tx_texto.nb_py = self.lb_nome.nb_py + self.lb_nome.nb_altura + self.nb_distancia_label;
			
			elseif(self.st_orientacao == Field.TITULO_DOWN)then
				
				self.tx_texto.nb_py = self.nb_margem_superior;
				self.lb_nome.nb_py = self.tx_texto.nb_py + self.tx_texto.nb_altura + self.nb_distancia_label;
			
			end
		
		elseif(self.st_orientacao == Field.TITULO_LEFT) or (self.st_orientacao == Field.TITULO_RIGHT)then
			self.nb_altura = math.max(self.tx_texto.nb_altura,self.lb_nome.nb_altura) + self.nb_margem_superior+self.nb_margem_inferior;
			self.nb_largura = self.tx_texto.nb_largura + self.lb_nome.nb_largura +self.nb_distancia_label + self.nb_margem_esquerda + self.nb_margem_direita;
			
			self.lb_nome.nb_py = (self.nb_altura - self.lb_nome.nb_altura)/2;
			self.tx_texto.nb_py = (self.nb_altura - self.tx_texto.nb_altura)/2; 
				
			if(self.st_orientacao == Field.TITULO_LEFT) then
				
				self.lb_nome.nb_px = self.nb_margem_esquerda;
				self.tx_texto.nb_px = self.lb_nome.nb_px + self.lb_nome.nb_largura + self.nb_distancia_label;
					
			elseif(self.st_orientacao == Field.TITULO_RIGHT)then
				
				self.tx_texto.nb_px = self.nb_margem_esquerda;
				self.lb_nome.nb_px = self.tx_texto.nb_px + self.tx_texto.nb_largura + self.nb_distancia_label;
				
			end
		end
	elseif(self.tx_texto ~= nil)then
		self.nb_altura = self.tx_texto.nb_altura + self.nb_margem_superior+self.nb_margem_inferior;
		self.nb_largura = self.tx_texto.nb_largura + self.nb_margem_esquerda+self.nb_margem_direita;
		
		self.tx_texto.nb_px = (self.nb_margem_esquerda+self.nb_margem_direita)/2;
		self.tx_texto.nb_py = (self.nb_margem_inferior+self.nb_margem_superior)/2;
	
	elseif(self.lb_nome ~= nil)then
		self.nb_altura = self.lb_nome.nb_altura + self.nb_margem_superior+self.nb_margem_inferior;
		self.nb_largura = self.lb_nome.nb_largura + self.nb_margem_esquerda+self.nb_margem_direita;
		
		self.lb_nome.nb_px = (self.nb_margem_esquerda+self.nb_margem_direita)/2;
		self.lb_nome.nb_py = (self.nb_margem_inferior+self.nb_margem_superior)/2;
	else
	
	end

	self.is_label_alterado = false;
	self.is_texto_alterado = false;	
end


function Field:setTexto(st_texto)
	self.st_texto = st_texto; 
	self.tx_texto:setTitulo(self.st_texto);
	self.tx_texto:atualizar();
	
	self.is_texto_alterado = true;
end

function Field:setLabel(newLabel)
	self.lb_nome = newLabel;
	
	self.lb_nome:atualizar();
	
	self.is_label_alterado = true;
end

